package com.vonzhou.springinaction.springidol;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;

/**
 * @author XiaoDongLei
 * @Package com.vonzhou.springinaction.springidol
 * @date 2018/3/27
 * @Description: ContestantIntroducer是一个切面。但是，它与我们之前所创建的切面不同，它并没有提供前置、后置或环绕通知，而是通过@DeclareParents注解，将Contestant接口引入到Performance bean中。
 *
 * 1、@DeclareParents注解由三部分组成：
 * 1.1、value属性指定了哪种类型的bean要引入该接口。在本例中，也就是所有实现Performance的类型。（标记符后面的加号表示是Performance的所有子类型，而不是Performance本身。）
 * 1.2、defaultImpl属性指定了为引入功能提供实现的类。在这里，我们指定的是GraciousContestant提供实现。
 * 1.3、@DeclareParents注解所标注的静态属性指明了要引入了接口。在这里，我们所引入的是Contestant接口。
 *
 */
@Aspect
public class ContestantIntroducer {

	@DeclareParents( //<co id="co_declareParents"/>
			value = "com.vonzhou.springinaction.springidol.Performer+",
			defaultImpl = GraciousContestant.class)
	public static Contestant contestant;
}